# ssh_config configuration file parameters
type Ssh::Ssh_Config = Struct[
  {
    Optional['Host']                             => Stdlib::Host,
    Optional['Match']                            => String[1],
    Optional['AddKeysToAgent']                   => Enum['yes', 'no', 'ask', 'confirm'],
    Optional['AddressFamily']                    => Enum['any', 'inet', 'inet6'],
    Optional['BatchMode']                        => Ssh::Yes_no,
    Optional['BindAddress']                      => String[1],
    Optional['BindInterface']                    => String[1],
    Optional['CanonicalDomains']                 => String[1],
    Optional['CanonicalizeFallbackLocal']        => Ssh::Yes_no,
    Optional['CanonicalizeHostname']             => Enum['yes', 'no', 'always'],
    Optional['CanonicalizeMaxDots']              => Integer[0],
    Optional['CanonicalizePermittedCNAMEs']      => String[1],
    Optional['CASignatureAlgorithms']            => String[1],
    Optional['CertificateFile']                  => String[1],
    Optional['CheckHostIP']                      => Ssh::Yes_no,
    Optional['Ciphers']                          => String[1],
    Optional['ClearAllForwardings']              => Ssh::Yes_no,
    Optional['Compression']                      => Ssh::Yes_no,
    Optional['ConnectionAttempts']               => Integer[0],
    Optional['ConnectTimeout']                   => Integer[0],
    Optional['ControlMaster']                    => Enum['yes', 'no', 'ask', 'auto', 'autoask'],
    Optional['ControlPath']                      => String[1],
    Optional['ControlPersist']                   => String[1],
    Optional['DynamicForward']                   => String[1],
    Optional['EnableEscapeCommandline']          => Ssh::Yes_no,
    Optional['EnableSSHKeysign']                 => Ssh::Yes_no,
    Optional['EscapeChar']                       => String[1],
    Optional['ExitOnForwardFailure']             => Ssh::Yes_no,
    Optional['FingerprintHash']                  => Enum['sha256', 'md5'],
    Optional['ForkAfterAuthentication']          => Ssh::Yes_no,
    Optional['ForwardAgent']                     => Ssh::Yes_no,
    Optional['ForwardX11']                       => Ssh::Yes_no,
    Optional['ForwardX11Timeout']                => Variant[String[1], Integer[0]],
    Optional['ForwardX11Trusted']                => Ssh::Yes_no,
    Optional['GatewayPorts']                     => Ssh::Yes_no,
    Optional['GlobalKnownHostsFile']             => String[1],
    Optional['GSSAPIAuthentication']             => Ssh::Yes_no,
    Optional['GSSAPIDelegateCredentials']        => Ssh::Yes_no,
    Optional['HashKnownHosts']                   => Ssh::Yes_no,
    Optional['HostbasedAcceptedAlgorithms']      => String[1],
    Optional['HostbasedAuthentication']          => Ssh::Yes_no,
    Optional['HostKeyAlgorithms']                => String[1],
    Optional['HostKeyAlias']                     => String[1],
    Optional['Hostname']                         => String[1],
    Optional['IdentitiesOnly']                   => Ssh::Yes_no,
    Optional['IdentityAgent']                    => String[1],
    Optional['IdentityFile']                     => String[1],
    Optional['IgnoreUnknown']                    => String[1],
    Optional['Include']                          => String[1],
    Optional['IPQoS']                            => String[1],
    Optional['KbdInteractiveAuthentication']     => Ssh::Yes_no,
    Optional['KbdInteractiveDevices']            => String[1],
    Optional['KexAlgorithms']                    => String[1],
    Optional['KnownHostsCommand']                => String[1],
    Optional['LocalCommand']                     => String[1],
    Optional['LocalForward']                     => String[1],
    Optional['LogLevel']                         => Ssh::Log_level,
    Optional['LogVerbose']                       => String[1],
    Optional['MACs']                             => String[1],
    Optional['NoHostAuthenticationForLocalhost'] => Ssh::Yes_no,
    Optional['NumberOfPasswordPrompts']          => Integer[0],
    Optional['PasswordAuthentication']           => Ssh::Yes_no,
    Optional['PermitLocalCommand']               => Ssh::Yes_no,
    Optional['PermitRemoteOpen']                 => String[1],
    Optional['PKCS11Provider']                   => String[1],
    Optional['Port']                             => Stdlib::Port,
    Optional['PreferredAuthentications']         => String[1],
    Optional['ProxyCommand']                     => String[1],
    Optional['ProxyJump']                        => String[1],
    Optional['ProxyUseFdpass']                   => Ssh::Yes_no,
    Optional['PubkeyAcceptedAlgorithms']         => String[1],
    Optional['PubkeyAuthentication']             => Ssh::Yes_no,
    Optional['RekeyLimit']                       => String[1],
    Optional['RemoteCommand']                    => String[1],
    Optional['RemoteForward']                    => String[1],
    Optional['RequestTTY']                       => Enum['no', 'yes', 'force', 'auto'],
    Optional['RequiredRSASize']                  => Integer[0],
    Optional['RevokedHostKeys']                  => String[1],
    Optional['SecurityKeyProvider']              => String[1],
    Optional['SendEnv']                          => String[1],
    Optional['ServerAliveCountMax']              => Variant[String[1], Integer[0]],
    Optional['ServerAliveInterval']              => Variant[String[1], Integer[0]],
    Optional['SessionType']                      => Enum['default', 'none', 'subsystem'],
    Optional['SetEnv']                           => String[1],
    Optional['StdinNull']                        => Ssh::Yes_no,
    Optional['StreamLocalBindMask']              => Stdlib::Filemode,
    Optional['StreamLocalBindUnlink']            => Ssh::Yes_no,
    Optional['StrictHostKeyChecking']            => Enum['yes', 'no', 'accept-new', 'off', 'ask'],
    Optional['SyslogFacility']                   => Ssh::Syslog_facility,
    Optional['TCPKeepAlive']                     => Ssh::Yes_no,
    Optional['Tunnel']                           => Enum['yes', 'no', 'point-to-point', 'ethernet'],
    Optional['TunnelDevice']                     => String[1],
    Optional['UpdateHostKeys']                   => Ssh::Yes_no,
    Optional['User']                             => String[1],
    Optional['UserKnownHostsFile']               => String[1],
    Optional['VerifyHostKeyDNS']                 => Enum['yes', 'no', 'ask'],
    Optional['VisualHostKey']                    => Ssh::Yes_no,
    Optional['XAuthLocation']                    => String[1],
    Optional['custom']                           => Array,
  }
]
